﻿using System;
using System.Collections;

internal class Class_e
{
    private Hashtable _field_a = new Hashtable(0x2000);
    private Class_q _field_b;
    private Class_q _field_c;

    public void a()
    {
        lock (this._field_a)
        {
            if (this._field_c != null)
            {
                while ((this._field_c != null) && this._field_c.d())
                {
                    Class_q _q = this._field_c;
                    if (_q.c() != null)
                    {
                        this._field_c = _q.c();
                    }
                    else
                    {
                        this._field_c = null;
                    }
                    if (this._field_c != null)
                    {
                        this._field_c.a((Class_q) null);
                    }
                    if (_q.c() != null)
                    {
                        _q.c().a((Class_q) null);
                    }
                    _q.b(null);
                    this._field_a.Remove(_q.b());
                }
            }
        }
    }

    public object a(string A_0)
    {
        Class_q _q = (Class_q) this._field_a[A_0];
        if (_q != null)
        {
            return _q.f();
        }
        return null;
    }

    public void a(string A_0, object A_1, DateTime A_2)
    {
        lock (this._field_a)
        {
            Class_q _q = (Class_q) this._field_a[A_0];
            if (_q != null)
            {
                if (_q.a() != null)
                {
                    _q.a().b(_q.c());
                }
                if (_q.c() != null)
                {
                    _q.c().a(_q.a());
                }
            }
            else
            {
                _q = new Class_q();
                this._field_a[A_0] = _q;
            }
            _q.a(A_1);
            _q.a(A_0);
            _q.a(A_2);
            if (this._field_b != null)
            {
                _q.a(this._field_b);
                this._field_b.b(_q);
            }
            this._field_b = _q;
            if (this._field_c == null)
            {
                this._field_c = _q;
            }
        }
    }

    public void b(string A_0)
    {
        lock (this._field_a)
        {
            this._field_a.Remove(A_0);
        }
    }
}

